package com.bw.i_video.startup

import android.content.Context
import android.content.SharedPreferences
import android.os.Build
import android.util.Log

/**
 * 启动优化配置
 * 管理启动优化的各种配置参数
 */
object StartupConfig {
    
    private const val TAG = "StartupConfig"
    private const val PREFS_NAME = "startup_config"
    private const val KEY_LAST_STARTUP_TIME = "last_startup_time"
    private const val KEY_STARTUP_COUNT = "startup_count"
    private const val KEY_AVERAGE_STARTUP_TIME = "average_startup_time"
    
    private lateinit var prefs: SharedPreferences
    
    /**
     * 初始化配置
     */
    fun init(context: Context) {
        prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
        Log.d(TAG, "启动优化配置初始化完成")
    }
    
    /**
     * 记录启动时间
     */
    fun recordStartupTime(startupTime: Long) {
        val lastTime = prefs.getLong(KEY_LAST_STARTUP_TIME, 0)
        val count = prefs.getInt(KEY_STARTUP_COUNT, 0)
        val averageTime = prefs.getLong(KEY_AVERAGE_STARTUP_TIME, 0)
        
        // 计算新的平均启动时间
        val newCount = count + 1
        val newAverageTime = if (count == 0) {
            startupTime
        } else {
            (averageTime * count + startupTime) / newCount
        }
        
        prefs.edit()
            .putLong(KEY_LAST_STARTUP_TIME, startupTime)
            .putInt(KEY_STARTUP_COUNT, newCount)
            .putLong(KEY_AVERAGE_STARTUP_TIME, newAverageTime)
            .apply()
        
        Log.d(TAG, "记录启动时间: ${startupTime}ms, 平均启动时间: ${newAverageTime}ms")
    }
    
    /**
     * 获取启动统计信息
     */
    fun getStartupStats(): StartupConfigStats {
        return StartupConfigStats(
            lastStartupTime = prefs.getLong(KEY_LAST_STARTUP_TIME, 0),
            startupCount = prefs.getInt(KEY_STARTUP_COUNT, 0),
            averageStartupTime = prefs.getLong(KEY_AVERAGE_STARTUP_TIME, 0)
        )
    }
    
    /**
     * 是否启用启动优化
     */
    fun isStartupOptimizationEnabled(): Boolean {
        // 可以根据设备性能、系统版本等条件决定是否启用优化
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
    }
    
    /**
     * 获取启动超时时间
     */
    fun getStartupTimeout(): Long {
        // 可以根据设备性能动态调整超时时间
        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            5000L // 5秒
        } else {
            8000L // 8秒
        }
    }
    
    /**
     * 是否启用并行执行
     */
    fun isParallelExecutionEnabled(): Boolean {
        // 可以根据设备性能决定是否启用并行执行
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
    }
    
    /**
     * 获取线程池大小
     */
    fun getThreadPoolSize(): Int {
        // 可以根据设备性能动态调整线程池大小
        val cpuCount = Runtime.getRuntime().availableProcessors()
        return if (cpuCount >= 4) {
            4
        } else {
            2
        }
    }
}

/**
 * 启动配置统计信息
 */
data class StartupConfigStats(
    val lastStartupTime: Long,
    val startupCount: Int,
    val averageStartupTime: Long
)
